package com.cskaoyan.mall.pay.service.impl;

import com.cskaoyan.mall.pay.api.OrderPayServiceClient;
import com.cskaoyan.mall.pay.constants.PayReturnCodeEnum;
import com.cskaoyan.mall.pay.dto.PaymentRequest;
import com.cskaoyan.mall.pay.dto.alipay.AlipayQueryRetResponse;
import com.cskaoyan.mall.pay.dto.alipay.AlipaymentResponse;
import com.cskaoyan.mall.pay.service.PayCoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @auther cskaoyan
 * @date 2022/4/26:14:42
 */
@Service
public class PayCoreServiceImpl implements PayCoreService {

    @Autowired
    PayHelper payHelper;

    @Autowired
    OrderPayServiceClient orderPayServiceClient;

    /*
            获取支付二维码
     */
    @Override
    public AlipaymentResponse aliPay(PaymentRequest request) {

        AlipaymentResponse alipaymentResponse = new AlipaymentResponse();
        // 1. 调用支付宝接口获取支付二维码
        String qrCode = payHelper.test_trade_precreate(request);

        // 2. 如果获取支付二维码失败，直接返回错误的响应
        if (qrCode == null) {
            // 返回支付失败的响应
            alipaymentResponse.setCode(PayReturnCodeEnum.GET_CODE_FALIED.getCode());
            alipaymentResponse.setMsg(PayReturnCodeEnum.GET_CODE_FALIED.getMsg());
            return alipaymentResponse;
        }

        // 3. 获取支付二维码成功，在tb_payment插入针对该订单支付请求的支付记录(TRADE_PROCESSING)

        // 4. 返回正确的响应
        alipaymentResponse.setCode(PayReturnCodeEnum.SUCCESS.getCode());
        alipaymentResponse.setMsg(PayReturnCodeEnum.SUCCESS.getMsg());
        alipaymentResponse.setQrCode(qrCode);
        return alipaymentResponse;
    }


    /*
          查询支付状态的逻辑
     */
    @Override
    public AlipayQueryRetResponse queryAlipayRet(PaymentRequest request) {
        // 查询指定订单的支付结果
        boolean success = payHelper.test_trade_query(request.getTradeNo());

        // 判断支付结果
        if (success) {
             // 支付成功
            // 1. 更新tb_payment表中针对该订单记录的支付状态(TRADE_SUCCESS)， 支付成功时间，完成时间
             //  统统调用调用去完成
            //orderPayServiceClient.payOrderSuccess()
            // 2. 修改订单状态(支付成功)
            // 3. 修改库存
            //    a. 根据订单id, 查询订单中包含的所有订单商品条目
            //    b. 获取每一个订单商品购买的数量，扣减对应商品的锁定库存
        } else {
            // 支付失败
            // 1. 更新tb_payment表中针对该订单记录的支付状态(FAIL)，完成时间
        }

        // 返回响应
        return null;
    }
}
